模块
一、模块概念
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 1. 在一个大型项目的开发过程上,如果将所有的代码都写在一个.py文件中,那么将会导致文件中的代码过长,代码的阅读和维护变得很困难.
2. 因此,我们可以根据功能需求的不同,将项目中的不同功能实现的代码放置在不同的.py文件中. - 人员信息管理系统: - Date类放在date.py - Person类放在person.py - PersonList类放在personlist.py 3. 在Python中,一个.py文件就称之为一个模块(module),即一个py文件被看作是一个独立的模块.
4. 一个项目,可以由很多个.py文件来组成,当然我们也可以将多个关系比较紧密的.py文件中组织在一起,放在一个目录中(Python中的包). 项目名: 目录1-包1 1.py 2.py 目录2-包2 hello.py world.py
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # 在Python中,如何管理项目结构
1. 一个项目可以分为很多个目录(包),一个包就是一个完整的功能模块的集合
2. 每个包里又可以有很多个.py文件
3. 每个py文件中,可以有很多个变量、函数、类..
4. 每个类中,又可以有很多个属性和方法
目的:最终实现'模块化开发',一个项目分为很多个功能模块 - 结构清晰 - 方便维护 - 复用性高
|
二、模块的分类
1 2 3 4 5 6 7 8 9 10 11 12
| 1. 内置模块(Python自带,已经写好的.py文件,安装python解释器时已经有了) - os模块、time模块、sys模块、math模块.... - 在这些模块中,定义好了很多个变量、函数、类等,可以供程序员直接使用 2. 自定义模块(自己写的.py文件) - demo01.py demo02.py - 定义模块名时,不要和内置模块重名 - 模块名一般小写 3. 第三方开源模块(大牛/别人写好的.py文件) - pypi.org 供开源作者上传他的py文件,其他人下载py文件 (闲鱼) - download下载压缩 或 pip install 模块名
|
三、模块的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import math print(math.pi) print(math.pow(2,3)) print(math.hypot(3,4))
或 import math as mt print(mt.pi)
或 from math import pi print(pi)
或 from math import pi as pai print(pai)
或 from math import * print(pi)
|
1 2 3 4
| a = 100 def f(): print('this is student function')
|
1 2 3 4 5 6 7 8 9
| import student print(student.a)
import student as st print(st.a) st.f()
|
总结:
1 2 3 4 5 6 7 8 9
| 1. import 模块名1,模块名2
2. import 模块名 as 别名
3. from 模块名 import 标识符(全局变量、函数、类)
4. from 模块名 import 标识符 as 别名
5. from 模块名 import *
|
注意:导入模块时,会自动执行里面的代码
四、包
1、包的概念
1 2 3 4 5 6 7
| 1. 包 Package: 是一种特殊的目录,可以包含多个模块(py文件)或子包
2. Python规定包下面必须包含一个__init__文件 - init文件一般为空文件 - 如果__init__中定义了代码,在导包时会被自动执行 3. 包名一般为小写
|
2、包的使用
1 2 3 4 5 6 7 8 9 10 11 12
| # 创建包的两种方式 1. 创建一个空目录,然后在目录创建一个__ini__.py文件即可 2. pycharm右键-New -> Python Package
- pack1 - __init__.py - p1.py - pack2 - __init__.py - p2.py - main.py
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import pack1.p1 print(pack1.p1.a)
或 import pack1.p1 as pk1 print(pk1.a)
或 from pack1 import p1 print(p1.a)
或 from pack1 import p1 as pk1 print(pk1.a)
或 from pack1.p1 import a print(a)
或 from pack1.p1 import * print(a)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 导包建议使用from语法 from 包名 import 模块名 模块名.xx
# 总结导包的方式: 1. import 包名.模块 - 包名.模块名.xx 2. import 包名.模块 as 别名 - 别名.xx 3. from 包名 import 模块名 - 模块名.xx 4. from 包名 import 模块名 as 别名 - 别名.xx 5. from 包名.模块名 import 标识符 - xx 6. from 包名.模块名 import * - xx
|
五、__name__
1 2 3 4 5 6 7
| 1. __name__是一个变量,可以在任意地方使用
2. 如果以当前文件运行,__name__的值为 __main__
3. 如果这个文件(模块)是被其它文件(模块)引用,并是以其它模块来运行时,__name__的值为这个模块的路径
4. 通过__name__可以得知是否是以当前模块来运行的
|
使用场景:
如果某个模块中的代码,只有以当前文件运行时才执行,此时可以添加如下代码:
1 2 3
| if __name__ == '__main__': 当前模块的测试代码 当该模块是被其它模块导入,并以其它模块运行时,这里的代码不会被执行
|
六、模块的搜索路径
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| # 获取系统搜索模块的路径 import sys print(sys.path)
# 系统会在sys.path所列出的路径中去查找当前导入的模块,如果在这些路径找不到该模块,则提示 No module named 'pack11'
对于自定义模块导入时的寻找路径有: 1. 项目目录 2. 当前模块所在的目录
对于内置模块一般在: 1. python安装目录的lib目录下
对于第三方模块: 1. \lib\site-packages
|
七、time模块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
import time
t = time.time() print(t)
localtime = time.localtime() print(localtime) print(localtime.tm_year) print(localtime.tm_mon)
localtime = time.localtime(t) print(localtime)
asctime = time.asctime() print(asctime)
print(time.mktime(localtime))
print(time.strftime('%Y/%m/%d %H:%M:%S',time.localtime()))
time.sleep(3)
|
1 2 3 4 5 6 7
| from datetime import datetime
print(datetime.now())
print(str(datetime.now()).split('.')[0])
print(datetime.now().strftime('%Y/%m/%d %H:%M:%S'))
|